package db.entity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

import db.BaseDAO;
import db.Transaction;
import db.TransformInterface;

import model.ResourceType;

/**
 * 
 * Description: 对资源类型的数据进行处理的DAO。
 * 
 * @since  2009/2/23
 * @author ashen
 * 
 */
public class ResourceTypeDAO extends BaseDAO implements TransformInterface<ResourceType>{
	
	public ResourceTypeDAO(){
		setTableName("userscheme.resourcetype");
	}
	
	/**
	 * the method save of class ResourceTypeDAO
	 * 
	 * 该方法将参数资源类型对象存储到数据库
	 * 
	 * @param resourceType 需要保存的ResourceType对象
	 * @return 返回操作成功与否
	 */
	public boolean save(ResourceType resourceType){
		return save(object2HashMap(resourceType));
	}
	
	/**
	 * the method update of class ResourceTypeDAO 
	 * 
	 * 该方法将参数资源类型更新到数据库
	 * 
	 * @param resourceType 需要更新的ResourceType对象
	 * @return 返回操作成功与否
	 */
	public boolean update(ResourceType resourceType){
		return update(object2HashMap(resourceType),"ID");
	}
	
	/**
	 * the method delete of class ResourceTypeDAO
	 * 
	 * 该方法删除指定资源类型ID的资源类型
	 * 
	 * @param id 需要删除的资源类型的ID
	 * @return 返回操作成功与否
	 */
	public boolean delete(int id){
		return delete("id",id);
	}
	
	/**
	 * the method findAll of class ResourceTypeDAO
	 * 
	 * 该方法返回所有资源类型
	 * 
	 * @return ArrayList<ResourceType>类型，返回数据中所有资源类型
	 */
	public ArrayList<ResourceType> findAll(){
		Transaction transaction=new Transaction();
		ArrayList<ResourceType> list= list2ObjectList(super.findAllBase(transaction));
		transaction.close();
		return list;
	}

	/**
	 * the method findById of class ResourceTypeDAO
	 * 
	 * 该方法通过指定资源类型ID查找资源类型
	 * 
	 * @param id 资源类型ID
	 * @return 查询到的资源类型
	 */
	public ResourceType findById(int id){
		Transaction transaction=new Transaction();
		ResourceType object= hashMap2Object(findByPK("id",id,transaction));
		transaction.close();
		return object;
	}
	
	/**
	 * the method findByName of class ResourceTypeDAO
	 * 
	 * 该方法通过指定资源类型名称查找资源类型，资源类型名不可重复
	 * 
	 * @param name 资源类型名称
	 * @return 查询到的资源类型
	 */
	public ResourceType findByType(String type){	
		Transaction transaction=new Transaction();
		ResourceType object= 
			hashMap2Object(findByPK("type",getFormatString(type),transaction));
		transaction.close();
		return object;
	}
	
	
	/**
	 * the method list2ObjectList of class ResourceTypeDAO
	 * 
	 * 该方法将存有资源类型的HashMap对象数组转换为ResourceType对象数组
	 * 
	 * @param hashMapList HashMap对象数组
	 * @return ResourceType对象数组
	 */
	public ArrayList<ResourceType> list2ObjectList(ArrayList<HashMap> hashMapList){
		ResourceType tempObject=null;
		ArrayList<ResourceType> resultList=new ArrayList<ResourceType>();
		if(hashMapList.isEmpty())
			return resultList;
		for(Iterator i=hashMapList.iterator();i.hasNext();){
			tempObject=hashMap2Object((HashMap)i.next());
			if(tempObject!=null)
				resultList.add(tempObject);
		}
		return resultList;
	}
	
	/**
	 * the method hashtable2Point of class ResourceTypeDAO
	 * 
	 * 该方法将HashMap类型的对象转换为ResourceType的对象，并返回ResourceType的对象.
	 * 
	 * @param hashMap 存储了一个资源类型信息的HashMap类型的对象
	 * @return ResourceType的对象.
	 */
	public ResourceType hashMap2Object(HashMap hashMap){
		if(hashMap==null)
			return null;
		ResourceType type=new ResourceType();
		type.setId((Integer)hashMap.get("ID"));
		type.setType((String)hashMap.get("TYPE"));
		type.setDescription((String)hashMap.get("DESCRIPTION"));
		return type;
	}
	
	/**
	 * the method object2HashMap of class ResourceTypeDAO
	 * 
	 * 该方法将参数ServiceRegistry对象转换为存储参数ServiceRegistry对象信息的HashMap对象，并返回
	 * 
	 * @param resourceType 资源类型ResourceType对象
	 * @return 存储参数资源类型ResourceType对象信息的HashMap对象
	 */
	public HashMap object2HashMap(ResourceType resourceType){
		HashMap hashMap=new HashMap();
		hashMap.put("ID", "default");
		hashMap.put("TYPE", getFormatString(resourceType.getType()));
		hashMap.put("DESCRIPTION", getFormatString(resourceType.getDescription()));
		return hashMap;
	}	
}